package com.zmn.plat.services.interfaces.channel;

import java.util.List;

import com.zmn.plat.model.vo.channel.category.ChannelCategoryUnionVo;
import org.apache.ibatis.annotations.Param;

import com.zmn.plat.model.entity.category.ServCategAndCategTwoQuery;
import com.zmn.plat.model.entity.channel.ChannelServiceAreaCategory;
import com.zmn.plat.model.vo.channel.ChannelServiceAreaProductCategoryVo;

/**
 * 渠道区域服务分类
 *
 * @author xiangjunming
 * @since 2019 /08/19 12:15:26
 */
public interface ChannelServiceAreaCategoryService {

    /**
     * 根据ID查询
     *
     * @param id
     *            the id
     * @return the channel new service area category
     */
    ChannelServiceAreaCategory findByKey(Integer id);

    /**
     * 根据服务区域ID查询
     *
     * @param serviceAreaId
     *            the service area id
     * @param showType
     *            产品分类 1后台 2前台
     * @return the list
     */
    List<ChannelServiceAreaCategory> listByServiceAreaId(Integer serviceAreaId, Integer showType);

    /**
     * 根据渠道ID，分类标识查询服务区域ID
     *
     * @param channelId
     * @param showType
     *            产品分类 1后台 2前台
     * @return
     */
    List<Integer> listServiceAreaIdByChannelIdAndShowType(Integer channelId, Integer showType);

    /**
     * 根据渠道ID，分类标识，服务分类ID，二级分类ID查询
     *
     * @param channelId
     * @param showType
     *            产品分类 1后台 2前台
     * @param servCategIds
     * @param categIds
     * @return
     */
    List<ChannelServiceAreaCategory> listByChannelIdAndShowTypeAndServCategIdsAndCategIds(Integer channelId, Integer showType, List<Integer> servCategIds, List<Integer> categIds);

    /**
     * 根据渠道ID，城市id，产品类型查询分类信息
     *
     * @param showType
     *            产品分类 1后台 2前台
     * @param channelId
     * @param cityId
     * @return
     */
    List<ChannelServiceAreaProductCategoryVo> listByChannelIdAndCityIdAndShowType(Integer channelId, Integer cityId, Integer showType);

    /**
     * 根据渠道ID和城市ID和服务分类ID集合查询渠道开通品类
     * @param channelId        渠道ID
     * @param cityId           城市ID
     * @param servCategIdList  服务分类ID集合
     * @return
     */
    List<ChannelCategoryUnionVo> listByChannelIdAndCityIdAndServCategIdList(Integer channelId, Integer cityId, List<Integer> servCategIdList);

    /**
     * 根据渠道ID，城市id，产品类型查询服务分类和二级产品分类信息
     *
     * @param channelId
     *            渠道Id
     * @param showType
     *            产品分类 1后台 2前台
     * @param cityId
     *            城市ID
     * @return
     */
    List<ServCategAndCategTwoQuery> listServCategAndCategTwoQueryByChannelIdAndCityIdAndShowType(Integer channelId, Integer cityId, Integer showType);

    /**
     * 根据渠道ID，城市ID，前后台标识查询分类配置数量
     *
     * @param channelId
     * @param cityId
     * @param showType
     * @return
     */
    int count(Integer channelId, Integer cityId, Integer showType);

    /**
     * 根据ID修改
     *
     * @param record
     *            the record
     * @return the int
     */
    int updateByKey(ChannelServiceAreaCategory record);

    /**
     * 新增
     *
     * @param record
     *            the record
     * @return the int
     */
    int insert(ChannelServiceAreaCategory record);

    /**
     * 批量新增
     *
     * @param list
     *            the list
     * @return the int
     */
    int insertBatch(List<ChannelServiceAreaCategory> list);

    /**
     * 根据ID删除
     *
     * @param id
     *            the id
     * @return the int
     */
    int deleteByKey(Integer id);

    /**
     * 根据ID集合删除
     *
     * @param ids
     *            the id
     * @return the int
     */
    int deleteByKeys(List<Integer> ids);

    /**
     * 根据服务区域ID删除
     *
     * @param serviceAreaId
     *            服务区域ID
     * @param showType
     *            产品分类 1后台 2前台
     * @return the int
     */
    int deleteByServiceAreaId(Integer serviceAreaId, Integer showType);

    /**
     * 根据服务区域ID和服务分类ID删除
     *
     * @param serviceAreaId
     *            服务区域ID
     * @param showType
     *            产品分类 1后台 2前台
     * @return the int
     */
    int deleteByServiceAreaIdAndServCategId(@Param("serviceAreaId") Integer serviceAreaId, @Param("servCategId") Integer servCategId, @Param("showType") Integer showType);

    /**
     * 根据服务区域IDS和服务分类ID删除
     *
     * @param serviceAreaIds 服务区域IDS
     * @param servCategId    服务分类ID
     * @param showType       前后台类型：1后台 2前台
     * @return
     */
    int deleteByServiceAreaIdsAndServCategId(@Param("serviceAreaIds") List<Integer> serviceAreaIds, @Param("servCategId") Integer servCategId, @Param("showType") Integer showType);

    /**
     * 根据服务区域ID批量删除
     *
     * @param serviceAreaIds
     *            服务区域ID
     * @param showType
     *            产品分类 1后台 2前台
     * @return the int
     */
    int deleteByServiceAreaIds(List<Integer> serviceAreaIds, Integer showType);

    /**
     * 描述: 根据渠道id删除
     *
     * @param channelId 渠道id
     * @return java.lang.Integer
     * @author guoqiao
     * @since 2021/6/9 14:27
     */
    Integer deleteByChannelId(Integer channelId);

    /**
     * 描述: 从旧渠道复制到新渠道
     *
     * @param originalChannelId 原渠道ID
     * @param targetChannelId 新渠道ID
     * @param operator 操作者
     * @return java.lang.Boolean
     * @author guoqiao
     * @since 2021/6/8 13:49
     */
    void copy(Integer originalChannelId, int targetChannelId, String operator);
}